<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 继承发展史
        // 1.传统形式==>原型链
        //   过多的继承了没用的属性

        // Grand.prototype.lastName = 'qi';

        // function Grand() {

        // }
        // var grand = new Grand();
        // Father.prototype = grand;

        // function Father() {
        //     this.name = '老六';
        // }
        // var father = new Father();
        // Son.prototype = father;

        // function Son() {

        // }
        // var son = new Son();


        // 2.借用构造函数
        //   不能继承借用的构造函数的原型
        //   每次构造函数都要多走一个函数

        // function Huang(name, age) {
        //     this.name = name;
        //     this.age = age;
        // }

        // function Zhu(name, age, air) {
        //     Huang.call(this, name, age)
        //     this.air = air;
        // }

        // var zhu = new Zhu();


        // 3.共享函数==>共有原型(标准的继承模式)
        //   不能随便改动自己的原型
        // Father.prototype.lastName = 'zhu';

        // function Father() {

        // }

        // function Son() {

        // }

        // function inherit(Target, Origin) {
        //     Target.prototype = Origin.prototype;
        // }
        // inherit(Son, Father);
        // var son = new Son();



        // 4.圣杯模式
        // function inherit(Target, Origin) {
        //     function F() {};
        //     F.prototype = Origin.prototype;
        //     Target.prototype = new F();
        //     Target.prototype.constuctur = Target;
        //     Target.prototype.uber = Origin.prototype; //继承自谁,可有可无
        // }
        // Father.prototype.lastName = 'zhu';

        // function Father() {}

        // function Son() {}

        // inherit(Son, Father);
        // var son = new Son();
        // var father = new Father();


        //高端写法
        // var inherit = (function() {
        //     var F = function() {}
        //     Origin.prototype.name = '02';
        //     return function() {
        //         F.prototype = Origin.prototype;
        //         Target.prototype = new F();
        //         Target.prototype.constuctor = Target;
        //         Target.prototype.uber = Origin.prototype;
        //     }
        // }());
    </script>
</body>

</html>